import { BASE_URL } from "./config"
import store from "../store/index.js";

class Request {
    constructor(baseUrl) {
        this.BASE_URL = baseUrl;
    }
    
    // 检查 token 是否有效的方法，这里只是示例，具体实现需要根据你的应用逻辑来定
    isTokenValid() {
        const { state: {author, expire_time} } = store || {};
        // const token = uni.getStorageSync('token'); // 假设 token 存储在本地存储中
        // 将后端返回的时间戳转换为 Date 对象  
        const expirationDate = new Date(expire_time);  // expire_time 后端返回的时间搓
        // 获取当前时间  
        const now = new Date();  
        // 计算时间差（毫秒）  
        const diff = expirationDate - now;  
        // 这里添加判断 token 有效性的逻辑，例如检查 token 是否存在、是否过期等
        // 假设如果 token 不存在，则认为无效
        return diff < 0 ? false : true;
    }

    // 异步方法，检查用户是否登录
    async checkUserLoggedIn() {
        let cookie = document.cookie
        try {
            const response = await uni.request({
                url: this.BASE_URL + '/user_logged',
                method: 'POST',
                header: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                    // 假设每个请求都需要带上 token
                    // 'Authorization': `Bearer ${uni.getStorageSync('token')}`
                    // [cookie]: `Bearer ${uni.getStorageSync('token')}`
                    
                    // [cookie]: `JSESSIONID=${token}`
                },
                // 额外的headers可以根据需要添加
            });
            console.log('=== response', response)
            // 假设服务器返回的结构是 { isLoggedIn: true/false }
            return response.data.isLoggedIn;
        } catch (error) {
            console.error('Failed to check session:', error);
            return false; // 在请求失败时安全默认为未登录
        }
    }
    
    // 封装请求方法
    async send( {url = '', method = 'GET', data = {}, header = 'application/x-www-form-urlencoded', loading = true, requestTime = 500 }) {
        const { state: {author, expire_time} } = store || {};

        // const fullUrl = window.location.href;
        // let currentPage = false
        // if (fullUrl.includes('login')) {
        //     currentPage = true
        // } else if ('http://localhost:8080/#/' == fullUrl) {
        //     currentPage = true
        // } else {
        //     currentPage = false
        // }
        // let isLoggedIn = true;

        
        // if (!currentPage) {
        //     isLoggedIn = await this.checkUserLoggedIn(); 
        //     console.log('=== 当前页', currentPage)
        // }
    
        // 判断当前页面是否处于登录页面，
        // if (!isLoggedIn) {
        //     // 如果 token 无效或登录已过期，可以进行一些处理，比如跳转到登录页面
        //     uni.showToast({
        //         title: '登录已过期，请重新登录',
        //         icon: 'none'
        //     });
        //     setTimeout(() => {
        //         // 假设这里跳转到登录页面
        //         uni.redirectTo({
        //             url: '../pages/login/login'
        //         });
        //     }, 1500);
        //     // 由于登录已过期，这里可以直接返回一个 rejected 的 Promise
        //     return Promise.reject('登录已过期');
        // }

        // const token = uni.getStorageSync('userInfo');

        
        let loadingStatus = true;
        setTimeout(() => {
            if (loadingStatus && loading) {
                uni.showLoading({
                    title: "加载中...",
                    mask: true
                });
               
            }
        }, requestTime);
        
        // 返回Promise对象
        return new Promise((resolve, reject) => {
            
            let token =  '';
            if (uni.getStorageSync('token')) {
                token = JSON.parse(uni.getStorageSync('token'))
            }
            
            let newHeader = {
                'Content-Type': header
            }
            if (token) {
                newHeader['Authorization'] = `${token}`
            }

            uni.requestx({
                url: this.BASE_URL + url,
                method: method,
                data: data,
                // withCredentials: true,
                header: newHeader,
                // {
                //      // 'Authorization': `Bearer ${token}`,
                //     'Content-Type': header,
                // },
                success: res => {
                    const {  data: { status, message }  } = res || {}
                    // console.log('== res ====  ', res, '== message ', message)
                    if (message === '未登陆系统，请先登陆') {
                        // uni.navigateTo({
                        //     url: '/pages/login/login'
                        // });
                        uni.showToast({
                            title: message,
                            duration: 2000,
                            icon: 'none'
                        });
                        return
                    }
                    resolve(res);
                },
                fail: err => {
                    const {  data: { status, message }  } = err || {}
                    if (message === '未登陆系统，请先登陆') {
                        uni.showToast({
                            title: message,
                            duration: 2000,
                            icon: 'none'
                        });
                        return
                    }
                    uni.showToast({
                        title: "网络错误",
                        icon: 'none',
                    });
                    reject(err);
                },
                complete: () => {

                    if (loadingStatus && loading) {
                        uni.hideLoading();
                    }
                    loadingStatus = false;
                }
            });
        });
    }

    // get: "application/json"

    get({url, data, header, loading, requestTime}) {
        return this.send({url, method: 'GET', data, header, loading, requestTime})
    }
    // post: 'application/x-www-form-urlencoded'
    post({url, data, header, loading, requestTime}) {
        return this.send({url, method:'POST', data, header, loading, requestTime})
    }

}

export default new Request(BASE_URL);
